package com.maxus.mini.ecard.data.api;

import java.io.Serializable;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import com.maxus.mini.common.VersionedAuditableIdEntity;

/**
 * 用户管理
 * 
 * @author wujinsong
 *
 */
@Service()
public interface BaseService<T extends VersionedAuditableIdEntity, ID extends Serializable> {
	public long count();

	/**
	 * 批量保存
	 * 
	 * @param entities
	 * @return
	 */
	public <S extends T> Iterable<S> save(Iterable<S> entities);

	/**
	 * 单个保存
	 * 
	 * @param entity
	 * @return
	 */
	public <S extends T> S save(S entity);

	/**
	 * 单个查询
	 * 
	 * @param id
	 * @return
	 */
	public T find(Long id);

	/**
	 * 是否存在
	 * 
	 * @param id
	 * @return
	 */
	public boolean exists(Long id);

	/**
	 * 查询全部
	 * 
	 * @return
	 */
	public Iterable<T> findAll();

	/**
	 * 根据id查询
	 * @param ids
	 * @return
	 */
	public Iterable<T> findAll(Iterable<Long> ids);

	/**
	 * 删除
	 * 
	 * @param id
	 */
	public void delete(Long id);

	/**
	 * 删除
	 * 
	 * @param entity
	 */
	public void delete(T entity);

	/**
	 * 删除
	 * 
	 * @param entities
	 */
	public <S extends T> void delete(Iterable<S> entities);

	/**
	 * 删除全部
	 */
	public void deleteAll();
	
	/**
	 * 
	 * @param sort
	 * @return
	 */
	public  Iterable<T> findAll(Sort sort);
	
	/**
	 * 
	 * @param pageable
	 * @return
	 */
	public Page<T> findAll(Pageable pageable);
}
